/**
 * 认证相关钩子函数
 * @author LYC
 * @date 2025-09-21
 */

import { ref, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { useUserStore } from '@/store/user'
import { verifyToken } from '@/api/auth'
import { getAuthState, getCurrentUser } from '@/api/ipc'

/**
 * 自动登录钩子
 * 检查本地存储的token，尝试自动登录
 */
export function useAutoLogin() {
  const userStore = useUserStore()
  const router = useRouter()
  const isChecking = ref(false)
  const isAuthenticated = ref(false)

  // 尝试自动登录
  const checkAuth = async () => {
    isChecking.value = true

    try {
      // 如果已经有用户信息，则已登录
      if (userStore.isLoggedIn) {
        isAuthenticated.value = true
        isChecking.value = false
        return true
      }

      // 检查是否有token
      const token = localStorage.getItem('auth-token')
      if (!token) {
        isChecking.value = false
        return false
      }

      // Electron环境下，尝试从主进程获取认证状态
      if (window.electron?.ipcRenderer) {
        try {
          const authState = await getAuthState()
          if (authState.state === 'logged_in' && authState.user) {
            userStore.setUser(authState.user)
            isAuthenticated.value = true
            isChecking.value = false
            return true
          }
        } catch (err) {
          console.error('无法从主进程获取认证状态:', err)
        }
      }

      // 验证token有效性
      const isValid = await verifyToken(token)
      if (!isValid) {
        // token无效，清除
        localStorage.removeItem('auth-token')
        isChecking.value = false
        return false
      }

      // 使用token获取用户信息
      if (window.electron?.ipcRenderer) {
        const user = await getCurrentUser()
        if (user) {
          userStore.setUser({ ...user, token })
          isAuthenticated.value = true
          isChecking.value = false
          return true
        }
      }

      // 如果无法获取用户信息，清除token
      localStorage.removeItem('auth-token')
      isChecking.value = false
      return false
    } catch (error) {
      console.error('自动登录失败:', error)
      localStorage.removeItem('auth-token')
      isChecking.value = false
      return false
    }
  }

  // 在组件挂载时检查认证状态
  onMounted(() => {
    checkAuth().then((isAuthed) => {
      if (isAuthed) {
        // 如果当前在登录页面且已登录，则重定向到主页
        if (router.currentRoute.value.path === '/login') {
          router.replace('/home')
        }
      } else {
        // 如果未登录且不在登录页面，重定向到登录页
        if (router.currentRoute.value.path !== '/login') {
          router.replace('/login')
        }
      }
    })
  })

  return {
    isChecking,
    isAuthenticated,
    checkAuth
  }
}

/**
 * 登出钩子
 */
export function useLogout() {
  const userStore = useUserStore()
  const router = useRouter()

  const logout = async () => {
    try {
      // 清除存储
      userStore.logout()

      // 通知主进程登出
      if (window.electron?.ipcRenderer) {
        window.electron.ipcRenderer.send('logout')
      }

      // 重定向到登录页
      router.push('/login')

      return true
    } catch (error) {
      console.error('登出失败:', error)
      return false
    }
  }

  return {
    logout
  }
}
